package com.boot.noRepeatSubmitAop.aop;

import com.boot.noRepeatSubmit.KeyRuleEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * Created with IntelliJ IDEA.
 * @Author: zhaoxn
 * @Date: 2022/11/14/22:43
 * @Description:方法重复提交注解 默认2s内不允许重复调用
 * 也可以支持注解里添加属性，自定义时间间隔，单位(s)
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoRepeatSubmitHigh {

    /**
     * 设置请求锁定时间 默认3s
     *
     */
    int lockTime() default 30;

    /**
     * 等待时间(n秒内获取不到锁尝试一直获取锁)
     *
     */
    long waitTime() default 5;

    /**
     * 时间类型，默认毫秒
     */
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;

    /**
     * 缓存key的规则
     *
     */
    KeyRuleEnum keyRule() default KeyRuleEnum.USER_PATH;

    /**
     * 提示语
     *
     */
    String alertMsg() default "操作频繁请稍后再试！";

    /**
     * 指定的key
     * 支持spel表达式，多个用+号拼接 #id+#dto.id
     * 最多支持一层即 #dto.id
     * 不支持多层属性即 #dto.info.id
     */
    String keys() default "";



}
